<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 命名空间： 闭包的第四点应用
        // 管理变量，防止污染全局，适用于模块化开发
        // 以前的方法：
        // 1. 在变量名前加名字前缀，以区分不同开发者起的变量名
        // 2. 定义一个对象，分部门，当做命名空间
             // var org = {
             //     department1: {
             //         jicheng: {里面是属于自己的变量名},
             //         xuming: {}
             //     },
             //     department2: {
     
             //     }
             // }


        // initialization 名词初始化,通常一个大的程序的开始执行的接口叫做init
        // initialize 动词初始化
        // initial 形容词

        var name = 'bcd';
        var init = (function() {
            var name = 'abc';  // 会优先使用函数里面定义的name
            function callName() {
                console.log(name);
            }
            return function() {  // 相当于留下一个接口去启动它
                callName();
            }
        }());

        init();

        var initDeng = (function(){
            var name = 123; // 自己的功能写在一个独立的空间里面，防止变量重复带来的问题
            function callName() {
                console.log(name);
            }
            return function() { 
                callName();
            }

        }());

        initDeng();


    </script>
</body>
</html>